package com.boomshake.mapper;

import com.boomshake.entity.CommissionConfig;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 佣金配置Mapper接口
 */
@Mapper
public interface CommissionConfigMapper {
    
    /**
     * 获取佣金配置列表
     * @param storeId 门店ID，可为null，为null时查询所有
     * @return 佣金配置列表
     */
    List<CommissionConfig> selectList(@Param("storeId") Long storeId);
    
    /**
     * 根据ID获取佣金配置
     * @param id 配置ID
     * @return 佣金配置
     */
    CommissionConfig selectById(@Param("id") Long id);
    
    /**
     * 根据门店ID和分销等级获取佣金配置
     * @param storeId 门店ID
     * @param level 分销等级
     * @return 佣金配置
     */
    CommissionConfig selectByStoreIdAndLevel(@Param("storeId") Long storeId, @Param("level") Integer level);
    
    /**
     * 获取佣金比例，优先获取门店专属配置，不存在则获取全局配置
     * @param storeId 门店ID
     * @param level 分销等级
     * @return 佣金比例
     */
    BigDecimal getRate(@Param("storeId") Long storeId, @Param("level") Integer level);
    
    /**
     * 新增佣金配置
     * @param config 佣金配置
     * @return 影响行数
     */
    int insert(CommissionConfig config);
    
    /**
     * 更新佣金配置
     * @param config 佣金配置
     * @return 影响行数
     */
    int update(CommissionConfig config);
    
    /**
     * 删除佣金配置
     * @param id 配置ID
     * @return 影响行数
     */
    int deleteById(@Param("id") Long id);
    
    /**
     * 检查是否存在相同门店和等级的配置
     * @param storeId 门店ID
     * @param level 分销等级
     * @param excludeId 排除的配置ID，用于更新时检查
     * @return 存在数量
     */
    int countByStoreIdAndLevel(@Param("storeId") Long storeId, @Param("level") Integer level, @Param("excludeId") Long excludeId);
} 